/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package EA_Model.IEC61970.Generation.Production;

import EA_Model.IEC61970.Core.PowerSystemResource;

import EA_Model.IEC61970.Domain.ActivePower;
import EA_Model.IEC61970.Domain.Length;
import EA_Model.IEC61970.Domain.Seconds;
import EA_Model.IEC61970.Domain.WaterLevel;

/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Hydro Power Plant</b></em>'.
 * <!-- end-user-doc -->
 *
 * <p>
 * The following features are supported:
 * <ul>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.HydroPowerPlant#getDischargeTravelDelay <em>Discharge Travel Delay</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.HydroPowerPlant#getGenRatedP <em>Gen Rated P</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.HydroPowerPlant#getHydroPlantType <em>Hydro Plant Type</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.HydroPowerPlant#getPenstockType <em>Penstock Type</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.HydroPowerPlant#getPlantDischargeCapacity <em>Plant Discharge Capacity</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.HydroPowerPlant#getPlantRatedHead <em>Plant Rated Head</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.HydroPowerPlant#getPumpRatedP <em>Pump Rated P</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.HydroPowerPlant#getSurgeTankCode <em>Surge Tank Code</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.HydroPowerPlant#getSurgeTankCrestLevel <em>Surge Tank Crest Level</em>}</li>
 * </ul>
 * </p>
 *
 * @see EA_Model.IEC61970.Generation.Production.ProductionPackage#getHydroPowerPlant()
 * @model
 * @generated
 */
public interface HydroPowerPlant extends PowerSystemResource {
	/**
	 * Returns the value of the '<em><b>Discharge Travel Delay</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Discharge Travel Delay</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Discharge Travel Delay</em>' reference.
	 * @see #setDischargeTravelDelay(Seconds)
	 * @see EA_Model.IEC61970.Generation.Production.ProductionPackage#getHydroPowerPlant_DischargeTravelDelay()
	 * @model ordered="false"
	 * @generated
	 */
	Seconds getDischargeTravelDelay();

	/**
	 * Sets the value of the '{@link EA_Model.IEC61970.Generation.Production.HydroPowerPlant#getDischargeTravelDelay <em>Discharge Travel Delay</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Discharge Travel Delay</em>' reference.
	 * @see #getDischargeTravelDelay()
	 * @generated
	 */
	void setDischargeTravelDelay(Seconds value);

	/**
	 * Returns the value of the '<em><b>Gen Rated P</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Gen Rated P</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Gen Rated P</em>' reference.
	 * @see #setGenRatedP(ActivePower)
	 * @see EA_Model.IEC61970.Generation.Production.ProductionPackage#getHydroPowerPlant_GenRatedP()
	 * @model ordered="false"
	 * @generated
	 */
	ActivePower getGenRatedP();

	/**
	 * Sets the value of the '{@link EA_Model.IEC61970.Generation.Production.HydroPowerPlant#getGenRatedP <em>Gen Rated P</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Gen Rated P</em>' reference.
	 * @see #getGenRatedP()
	 * @generated
	 */
	void setGenRatedP(ActivePower value);

	/**
	 * Returns the value of the '<em><b>Hydro Plant Type</b></em>' attribute.
	 * The literals are from the enumeration {@link EA_Model.IEC61970.Generation.Production.HydroPlantType}.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Hydro Plant Type</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Hydro Plant Type</em>' attribute.
	 * @see EA_Model.IEC61970.Generation.Production.HydroPlantType
	 * @see #setHydroPlantType(HydroPlantType)
	 * @see EA_Model.IEC61970.Generation.Production.ProductionPackage#getHydroPowerPlant_HydroPlantType()
	 * @model ordered="false"
	 * @generated
	 */
	HydroPlantType getHydroPlantType();

	/**
	 * Sets the value of the '{@link EA_Model.IEC61970.Generation.Production.HydroPowerPlant#getHydroPlantType <em>Hydro Plant Type</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Hydro Plant Type</em>' attribute.
	 * @see EA_Model.IEC61970.Generation.Production.HydroPlantType
	 * @see #getHydroPlantType()
	 * @generated
	 */
	void setHydroPlantType(HydroPlantType value);

	/**
	 * Returns the value of the '<em><b>Penstock Type</b></em>' attribute.
	 * The literals are from the enumeration {@link EA_Model.IEC61970.Generation.Production.PenstockType}.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Penstock Type</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Penstock Type</em>' attribute.
	 * @see EA_Model.IEC61970.Generation.Production.PenstockType
	 * @see #setPenstockType(PenstockType)
	 * @see EA_Model.IEC61970.Generation.Production.ProductionPackage#getHydroPowerPlant_PenstockType()
	 * @model ordered="false"
	 * @generated
	 */
	PenstockType getPenstockType();

	/**
	 * Sets the value of the '{@link EA_Model.IEC61970.Generation.Production.HydroPowerPlant#getPenstockType <em>Penstock Type</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Penstock Type</em>' attribute.
	 * @see EA_Model.IEC61970.Generation.Production.PenstockType
	 * @see #getPenstockType()
	 * @generated
	 */
	void setPenstockType(PenstockType value);

	/**
	 * Returns the value of the '<em><b>Plant Discharge Capacity</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Plant Discharge Capacity</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Plant Discharge Capacity</em>' reference.
	 * @see #setPlantDischargeCapacity(EA_Model.IEC61970.Domain.Float)
	 * @see EA_Model.IEC61970.Generation.Production.ProductionPackage#getHydroPowerPlant_PlantDischargeCapacity()
	 * @model ordered="false"
	 * @generated
	 */
	EA_Model.IEC61970.Domain.Float getPlantDischargeCapacity();

	/**
	 * Sets the value of the '{@link EA_Model.IEC61970.Generation.Production.HydroPowerPlant#getPlantDischargeCapacity <em>Plant Discharge Capacity</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Plant Discharge Capacity</em>' reference.
	 * @see #getPlantDischargeCapacity()
	 * @generated
	 */
	void setPlantDischargeCapacity(EA_Model.IEC61970.Domain.Float value);

	/**
	 * Returns the value of the '<em><b>Plant Rated Head</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Plant Rated Head</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Plant Rated Head</em>' reference.
	 * @see #setPlantRatedHead(Length)
	 * @see EA_Model.IEC61970.Generation.Production.ProductionPackage#getHydroPowerPlant_PlantRatedHead()
	 * @model ordered="false"
	 * @generated
	 */
	Length getPlantRatedHead();

	/**
	 * Sets the value of the '{@link EA_Model.IEC61970.Generation.Production.HydroPowerPlant#getPlantRatedHead <em>Plant Rated Head</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Plant Rated Head</em>' reference.
	 * @see #getPlantRatedHead()
	 * @generated
	 */
	void setPlantRatedHead(Length value);

	/**
	 * Returns the value of the '<em><b>Pump Rated P</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Pump Rated P</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Pump Rated P</em>' reference.
	 * @see #setPumpRatedP(ActivePower)
	 * @see EA_Model.IEC61970.Generation.Production.ProductionPackage#getHydroPowerPlant_PumpRatedP()
	 * @model ordered="false"
	 * @generated
	 */
	ActivePower getPumpRatedP();

	/**
	 * Sets the value of the '{@link EA_Model.IEC61970.Generation.Production.HydroPowerPlant#getPumpRatedP <em>Pump Rated P</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Pump Rated P</em>' reference.
	 * @see #getPumpRatedP()
	 * @generated
	 */
	void setPumpRatedP(ActivePower value);

	/**
	 * Returns the value of the '<em><b>Surge Tank Code</b></em>' attribute.
	 * The literals are from the enumeration {@link EA_Model.IEC61970.Generation.Production.SurgeTankCode}.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Surge Tank Code</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Surge Tank Code</em>' attribute.
	 * @see EA_Model.IEC61970.Generation.Production.SurgeTankCode
	 * @see #setSurgeTankCode(SurgeTankCode)
	 * @see EA_Model.IEC61970.Generation.Production.ProductionPackage#getHydroPowerPlant_SurgeTankCode()
	 * @model ordered="false"
	 * @generated
	 */
	SurgeTankCode getSurgeTankCode();

	/**
	 * Sets the value of the '{@link EA_Model.IEC61970.Generation.Production.HydroPowerPlant#getSurgeTankCode <em>Surge Tank Code</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Surge Tank Code</em>' attribute.
	 * @see EA_Model.IEC61970.Generation.Production.SurgeTankCode
	 * @see #getSurgeTankCode()
	 * @generated
	 */
	void setSurgeTankCode(SurgeTankCode value);

	/**
	 * Returns the value of the '<em><b>Surge Tank Crest Level</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Surge Tank Crest Level</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Surge Tank Crest Level</em>' reference.
	 * @see #setSurgeTankCrestLevel(WaterLevel)
	 * @see EA_Model.IEC61970.Generation.Production.ProductionPackage#getHydroPowerPlant_SurgeTankCrestLevel()
	 * @model ordered="false"
	 * @generated
	 */
	WaterLevel getSurgeTankCrestLevel();

	/**
	 * Sets the value of the '{@link EA_Model.IEC61970.Generation.Production.HydroPowerPlant#getSurgeTankCrestLevel <em>Surge Tank Crest Level</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Surge Tank Crest Level</em>' reference.
	 * @see #getSurgeTankCrestLevel()
	 * @generated
	 */
	void setSurgeTankCrestLevel(WaterLevel value);

} // HydroPowerPlant
